package com.itheima.easy.service;

import com.itheima.easy.base.PageResponse;
import com.itheima.easy.dto.OrderDto;
import com.itheima.easy.entity.Order;
import com.itheima.easy.vo.OrderVo;

import java.time.LocalDateTime;
import java.util.List;


/**
 * 订单服务接口
 * todo 执行记录
 */
public interface OrderService {
    /**
     * 创建订单
     * @param orderDto 订单信息
     * @return 订单信息
     */
    OrderVo createOrder(OrderDto orderDto);

    /**
     * 取消订单
     * @param orderId 订单ID
     * @param reason 取消原因
     * @return 订单信息
     */
    OrderVo cancelOrder(Long orderId, String reason);

    /**
     * 执行订单
     * @param orderId 订单ID
     * @return 订单信息
     */
    OrderVo doOrder(Long orderId);

    /**
     * 根据订单ID获取订单信息
     * @param orderId 订单ID
     * @return 订单信息
     */
    OrderVo getOrderById(Long orderId);

    /**
     * 搜索订单
     * @param status 订单状态
     * @param orderNo 订单编号
     * @param elderlyName 老人姓名
     * @param creator 创建人
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 页码
     * @param pageSize 每页数量
     * @return 订单信息列表
     */
    PageResponse<OrderVo> searchOrders(Integer status, Long orderNo, String elderlyName, String creator, LocalDateTime startTime, LocalDateTime endTime, Integer page, Integer pageSize);

    List<OrderVo> listByMemberId(Long id);

    void save(Order order);

    List<Order> selectByStatus(Integer status);

    /**
     * 线上支付
     * @param tradingOrderNos 交易号
     */
    void payOrder(List<Long> tradingOrderNos);

    /**
     * 线上退款
     * @param tradingOrderNos 交易号
     */

    void refundOrder(List<Long> tradingOrderNos);

    void delete(Long orderId);
}

